home *** CD-ROM | disk | FTP | other *** search
- /*
- * Cisco password decrypter V2.0
- * (c) 1995 by SPHiXe
- *
- * DISCLAIMER: The author of this program takes no responsibility for
- * neither direct nor indirect damages caused by this program.
- * Misuse of this program may lead to serious problems with
- * your local authorities...
- * You should know what you're doing.
- */
-
-
- #include <stdio.h>
- #include <ctype.h>
-
- char xlat[] = {
- 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
- 0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
- 0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44
- };
-
- char pw_str1[] = "password 7 ";
- char pw_str2[] = "enable-password 7 ";
-
- char *pname;
-
- cdecrypt(enc_pw, dec_pw)
- char *enc_pw;
- char *dec_pw;
- {
- unsigned int seed, i, val = 0;
-
- if(strlen(enc_pw) & 1)
- return(-1);
-
- seed = (enc_pw[0] - '0') * 10 + enc_pw[1] - '0';
-
- if (seed > 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))
- return(-1);
-
- for (i = 2 ; i <= strlen(enc_pw); i++)
- {
- if(i !=2 && !(i & 1))
- {
- dec_pw[i / 2 - 2] = val ^ xlat[seed++];
- val = 0;
- }
-
- val *= 16;
-
- if(isdigit(enc_pw[i] = toupper(enc_pw[i])))
- {
- val += enc_pw[i] - '0';
- continue;
- }
-
- if(enc_pw[i] >= 'A' && enc_pw[i] <= 'F')
- {
- val += enc_pw[i] - 'A' + 10;
- continue;
- }
-
- if(strlen(enc_pw) != i)
- return(-1);
- }
-
- dec_pw[++i / 2] = 0;
-
- return(0);
- }
-
- usage()
- {
- fprintf(stdout, "Usage: %s -p <encrypted password>\n", pname);
- fprintf(stdout, " %s <router config file> <output file>\n", pname);
-
- return(0);
- }
-
- main(argc,argv)
- int argc;
- char **argv;
-
- {
- FILE *in = stdin, *out = stdout;
- char line[257];
- char passwd[65];
- unsigned int i, pw_pos;
-
- pname = argv[0];
-
- if(argc > 1)
- {
- if(argc > 3)
- {
- usage();
- exit(1);
- }
-
- if(argv[1][0] == '-')
- {
- switch(argv[1][1])
- {
- case 'h':
- usage();
- break;
-
- case 'p':
- if(cdecrypt(argv[2], passwd))
- {
- fprintf(stderr, "Error.\n");
- exit(1);
- }
- fprintf(stdout, "password: %s\n", passwd);
- break;
-
- default:
- fprintf(stderr, "%s: unknow option.", pname);
- }
-
- return(0);
- }
-
- if((in = fopen(argv[1], "rt")) == NULL)
- exit(1);
- if(argc > 2)
- if((out = fopen(argv[2], "wt")) == NULL)
- exit(1);
- }
-
- while(1)
- {
- for(i = 0; i < 256; i++)
- {
- if((line[i] = fgetc(in)) == EOF)
- {
- if(i)
- break;
-
- fclose(in);
- fclose(out);
- return(0);
- }
- if(line[i] == '\r')
- i--;
-
- if(line[i] == '\n')
- break;
- }
- pw_pos = 0;
- line[i] = 0;
-
- if(!strncmp(line, pw_str1, strlen(pw_str1)))
- pw_pos = strlen(pw_str1);
-
- if(!strncmp(line, pw_str2, strlen(pw_str2)))
- pw_pos = strlen(pw_str2);
-
- if(!pw_pos)
- {
- fprintf(stdout, "%s\n", line);
- continue;
- }
-
- if(cdecrypt(&line[pw_pos], passwd))
- {
- fprintf(stderr, "Error.\n");
- exit(1);
- }
- else
- {
- if(pw_pos == strlen(pw_str1))
- fprintf(out, "%s", pw_str1);
- else
- fprintf(out, "%s", pw_str2);
-
- fprintf(out, "%s\n", passwd);
- }
- }
- }
- /* www.hack.co.za [19 May 2000]*/